home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #3 / Amiga Plus CD - 2002 - No. 03.iso / AmiSoft / Dev / Gui / Cit.lha / CIT / citra / CITWindow.h < prev   
Encoding:
C/C++ Source or Header  |  2003-02-13  |  6.4 KB  |  245 lines

  1. //
  2. //               CITWindow include
  3. //
  4. //                             StormC
  5. //
  6. //               version 2003.02.13
  7. //
  8.  
  9. #ifndef CITCITWINDOW_H
  10. #define CITCITWINDOW_H TRUE
  11.  
  12. #include <classes/window.h>
  13. #include <intuition/classusr.h>
  14.  
  15. #include "CITScreen.h"
  16.  
  17. //
  18. // These enums only for internal use
  19. //
  20. enum
  21. {
  22.   CITWD_POSITION = 0,
  23.   CITWD_POSITION_Y,
  24.   CITWD_WIDTH,
  25.   CITWD_HEIGHT,
  26.   CITWD_LOCKWIDTH,
  27.   CITWD_LOCKHEIGHT,
  28.   CITWD_SHAREDPORT,
  29.   CITWD_APPWINDOW,
  30.   CITWD_APPPORT,
  31.   CITWD_ICONIFYGADGET,
  32.   CITWD_BACKFILLNAME,
  33.   CITWD_MENUSTRIP,
  34.   CITWD_ICONTITLE,
  35.   CITWD_ICON,
  36.   CITWD_GADGETHELP,
  37.   CITWD_REFWINDOW,
  38.   CITWD_ACTIVATE,
  39.   CITWD_CLOSEGADGET,
  40.   CITWD_DEPTHGADGET,
  41.   CITWD_SIZEGADGET,
  42.   CITWD_DRAGBAR,
  43.   CITWD_BORDERLESS,
  44.   CITWD_BACKDROP,
  45.   CITWD_CAPTION,
  46.   CITWD_SCREENTITLE,
  47.   CITWD_LAST
  48. };
  49.  
  50. class CITWindowClass;
  51. class CITContainer;
  52. class CITGroup;
  53.  
  54. class CITWindow:public CITScreenClass
  55. {
  56.   public:
  57.     Window*    window;
  58.     Object*    windowObject;
  59.     TTextAttr* defTextAttr;
  60.     TextFont*  defTextFont;
  61.     int        LeftEdge, TopEdge;
  62.     int        Width, Height;
  63.  
  64.     CITWindow();
  65.     ~CITWindow();
  66.  
  67.     void Close() { closeWindow(); }
  68.     void Open()  {  openWindow(); }
  69.  
  70.     void InsObject(CITWindowClass& winClass,BOOL& Err);
  71.     void InsObject(CITWindowClass& winClass,CITContainer* parent,BOOL& Err);
  72.     void RemObject(CITWindowClass& winClass);
  73.  
  74.     void Align(CITGroup& group1,CITGroup& group2);
  75.     
  76.     void Size(int w, int h);
  77.     void Position(int x, int y);
  78.     void Position(UWORD pos);
  79.     void LockWidth(ULONG w)
  80.       {setTag(CITWD_LOCKWIDTH,WINDOW_LockWidth,w);}
  81.     void LockHeigh(ULONG h)
  82.       {setTag(CITWD_LOCKHEIGHT,WINDOW_LockHeight,h);}
  83.     void AppPort(BOOL b = TRUE)
  84.       {setTag(CITWD_APPPORT,WINDOW_AppPort,b,0);}
  85.     void AppWindow(BOOL b = TRUE)
  86.       {setTag(CITWD_APPWINDOW,WINDOW_AppWindow,b,0);}
  87.     void IconifyGadget(BOOL b = TRUE);
  88.     void BackFillName(char* name)
  89.       {setTag(CITWD_BACKFILLNAME,WINDOW_BackFillName,ULONG(name));}
  90.     void BusyPointer(BOOL b);
  91.     void Zoom(BOOL b);
  92.     void MenuStrip(struct Menu* menu)
  93.       {setTag(CITWD_MENUSTRIP,WINDOW_MenuStrip,ULONG(menu));}
  94.     void IconTitle(char* title)
  95.       {setTag(CITWD_ICONTITLE,WINDOW_IconTitle,ULONG(title));}
  96.     void Icon (struct DiskObject* diskObject)
  97.       {setTag(CITWD_ICON,WINDOW_Icon,ULONG(diskObject));}
  98.     void GadgetHelp(BOOL b = TRUE)
  99.       {setTag(CITWD_GADGETHELP,WINDOW_GadgetHelp,b);}
  100.     void RefWindow(CITWindow* wd)
  101.       {setTag(CITWD_REFWINDOW,WINDOW_RefWindow,ULONG(wd->window));}
  102.     void Activate(BOOL b = TRUE)
  103.       {setTag(CITWD_ACTIVATE,WA_Activate,b);}
  104.     void CloseGadget(BOOL b =TRUE)
  105.       {setTag(CITWD_CLOSEGADGET,WA_CloseGadget,b);}
  106.     void DepthGadget(BOOL b = TRUE)
  107.       {setTag(CITWD_DEPTHGADGET,WA_DepthGadget,b);}
  108.     void SizeGadget(BOOL b  = TRUE)
  109.       {setTag(CITWD_SIZEGADGET,WA_SizeGadget,b);}
  110.     void DragBar(BOOL b = TRUE)
  111.       {setTag(CITWD_DRAGBAR,WA_DragBar,b);}
  112.     void Borderless(BOOL b = TRUE)
  113.       {setTag(CITWD_BORDERLESS,WA_Borderless,b);}
  114.     void Backdrop(BOOL b = TRUE)
  115.       {setTag(CITWD_BACKDROP,WA_Backdrop,b);}
  116.     void ToFront();
  117.     void ToBack();
  118.     void MouseMoveOn(BOOL On);
  119.     void ScreenTitle(char* title)
  120.       {setTag(CITWD_SCREENTITLE,WA_ScreenTitle,ULONG(title));}
  121.     void Caption(char* title)
  122.       {setTag(CITWD_CAPTION,WA_Title,ULONG(title));}
  123.     void DefaultFont(char* name, short Height, short Width = 0);
  124.  
  125.     UWORD EventCode() {return eventCode;}
  126.     BOOL  ClosePressed();
  127.     int   TextLen(char* t);
  128.  
  129.     // Set user event handlers
  130.     void CloseEventHandler(void (*p)());
  131.     void CloseEventHandler(void* that,void* p);
  132.  
  133.     // Return inner size of window
  134.     virtual int InnerWidth();
  135.     virtual int InnerHeight();
  136.  
  137.   protected:
  138.     friend ULONG idcmpHookEntry(struct CITWindowHook* hook,APTR object,APTR msg);
  139.   
  140.     virtual void CloseEvent();
  141.     virtual BOOL Create(CITScreen* CITScr);
  142.     virtual void Delete();
  143.     virtual void Notify(ULONG event);
  144.     virtual void HandleEvent(ULONG Sigs);
  145.     virtual void HandleIDCMPHook(IntuiMessage* intuiMsg);
  146.     virtual void HandleWindowEvent(ULONG result,UWORD code);
  147.  
  148.     void updateIDCMPMasks();
  149.     void openWindow();
  150.     void closeWindow(BOOL iconify=FALSE);
  151.  
  152.     UWORD eventCode;
  153.     UWORD closeCount;
  154.  
  155.   private:
  156.     MsgPort*  wdIDCMP;
  157.     MsgPort*  appPort;
  158.     TTextAttr wdTextAttr;
  159.     TextFont* wdTextFont;
  160.     CITList   eventList;
  161.     CITList   childList;
  162.     CITList*  alignList;
  163.     TagItem*  windowTag;
  164.     ULONG     mouseMoveRequest;
  165.     ULONG     flags;
  166.     ULONG     idcmpEventMask;
  167.     ULONG     idcmpHookMask;
  168.  
  169.     struct Hook* hook;
  170.  
  171.     void *closeEventThat;
  172.     union
  173.     {
  174.       void (*Proc0)();
  175.       void (*Proc1)(void* that);
  176.     } closeEvent;
  177.     
  178.     struct Hook* createHook(ULONG userData);
  179.     
  180.     void notifyObjects(UWORD id,ULONG eventType,UWORD code);
  181.     void setTag(int index,ULONG attr,ULONG val,BOOL set = TRUE);
  182.     void SetUp();
  183. };
  184.  
  185. class CITWindowClass:public CITNode
  186. {
  187.   public:
  188.     CITWindow* CITWd;
  189.  
  190.     CITWindowClass();
  191.     ~CITWindowClass();
  192.  
  193.     virtual void Refresh();
  194.     
  195.     void  setFlags(ULONG mask,ULONG value);
  196.     ULONG getFlags() { return flags; }
  197.  
  198.     void    Page(Object* page) { cPage = page;}
  199.     Object* Page() { return cPage; }
  200.     
  201.   protected:
  202.     friend class CITWindow;
  203.  
  204.     UWORD   classID;
  205.     ULONG   IDCMPHookMask;
  206.     ULONG   eventMask;
  207.     ULONG   flags;
  208.     Object* cPage;
  209.     
  210.     virtual BOOL Create(CITWindow* CITWd,CITContainer* parent);
  211.     virtual void Delete();
  212.     virtual void HandleIDCMPHook(IntuiMessage* intuiMsg);
  213.     virtual void HandleEvent(UWORD id,ULONG eventType,UWORD code);
  214. };
  215.  
  216. enum
  217. {
  218.   WINCLASS_FLAGBITUSED = 0
  219. };
  220.  
  221. //
  222. // Event Types (most of them equal to corresponding IDCMP Flag)
  223. //
  224. #define EVENT_NEWSIZE           0x00000002L
  225. #define EVENT_MOUSEBUTTONS      0x00000008L
  226. #define EVENT_MOUSEMOVE         0x00000010L
  227. #define EVENT_GADGETDOWN        0x00000020L // Not implemented yet  
  228. #define EVENT_GADGETUP          0x00000040L
  229. #define EVENT_MENUPICK          0x00000100L
  230. #define EVENT_RAWKEY            0x00000400L
  231. #define EVENT_ACTIVEWINDOW      0x00040000L
  232. #define EVENT_INACTIVEWINDOW    0x00080000L
  233. #define EVENT_VANILLAKEY        0x00200000L
  234. #define EVENT_UPDATE            0x00800000L
  235. #define EVENT_MENUHELP          0x01000000L
  236. #define EVENT_CHANGEWINDOW      0x02000000L
  237. #define EVENT_GADGETHELP        0x04000000L
  238. #define EVENT_OPENWINDOW        0x20000000L // CIT private
  239. #define EVENT_CLOSEWINDOW       0x40000000L // CIT private
  240.  
  241. // Mask for Event Type common to IDCMP Flags
  242. #define EVENT_IDCMP             0x0F7FFFFFL
  243.  
  244. #endif
  245.